package main

import (
	"fmt"
	"sort"
)

func main() {
	// 选择排序：进行从小到大排序
	//概念: 通过比较，首先选出最小的数放在第一个位置上，然后在其余的数中选出次小数放在
	//第二个位置上,依此类推,直到所有的数成为有序序列。
	/*

		第一轮:
			9 8 7 6 5 4
			8 9 7 6 5 4
			7 9 8 6 5 4
			6 9 8 7 5 4
			5 9 8 7 6 4
			4 9 8 7 6 5    4放在了正确的位置
		第二轮:
			  9 8 7 6 5
			  8 9 7 6 5
			  7 9 8 6 5
			  6 9 8 7 5
			  5 9 8 7 6    5放在了正确的位置

		第三轮:
				9 8 7 6
				8 9 7 6
				7 9 8 6
				6 9 8 7    6放在了正确的位置

		第四轮:
				  9 8 7
				  8 9 7
				  7 9 8    7放在了正确的位置
		第五轮:
					9 8
					8 9    8放在了正确的位置

	*/
	//var numSlice = []int{9, 8, 7, 6, 5, 4}
	//for i := 0; i < len(numSlice); i++ {
	//	for j := i + 1; j < len(numSlice); j++ {
	//		if numSlice[i] > numSlice[j] {
	//			temp := numSlice[i]
	//			numSlice[i] = numSlice[j]
	//			numSlice[j] = temp
	//		}
	//	}
	//}
	//fmt.Println(numSlice)

	// 冒泡排序
	//概念:从头到尾,比较相邻的两个元素的大小,如果符合交换条件,交换两个元素的位置。
	//特点:每一轮比较中,都会选出一个最大的数，放在正确的位置。
	/*
		什么叫做冒泡排序？
			概念:从头到尾,比较相邻的两个元素的大小,如果符合交换条件,交换两个元素的位置。
			特点:每一轮比较中,都会选出一个最大的数，放在正确的位置。

			第一轮:
			9 8 7 6 5 4

			8 9 7 6 5 4
			8 7 9 6 5 4
			8 7 6 9 5 4
			8 7 6 5 9 4
			8 7 6 5 4 9    9放在了正确的位置


			第二轮:
			8 7 6 5 4

			7 8 6 5 4
			7 6 8 5 4
			7 6 5 8 4
			7 6 5 4 8     8放在了正确的位置


			第三轮:
			7 6 5 4

			6 7 5 4
			6 5 7 4
			6 5 4 7 	  7放在了正确的位置

			第四轮:
			6 5 4

			5 6 4
			5 4 6         6放在了正确的位置

			第五轮:
			5 4

			4 5
	*/
	//var numSlice = []int{9, 6, 5, 4, 8}
	//for i := 0; i < len(numSlice); i++ {
	//	for j := 0; j < len(numSlice)-1-i; j++ {
	//		if numSlice[j] > numSlice[j+1] {
	//			temp := numSlice[j]
	//			numSlice[j] = numSlice[j+1]
	//			numSlice[j+1] = temp
	//		}
	//	}
	//}
	//fmt.Println(numSlice)

	//1、sort升序排序
	// intList := []int{2, 4, 3, 5, 7, 6, 9, 8, 1, 0}
	// float8List := []float64{4.2, 5.9, 12.4, 10.2, 50.7, 99.9, 31.4, 27.81828, 3.14}
	// stringList := []string{"a", "c", "b", "z", "x", "w", "y", "d", "f", "i"}

	// sort.Ints(intList)
	// sort.Float64s(float8List)
	// sort.Strings(stringList)

	// fmt.Println(intList)
	// fmt.Println(float8List)
	// fmt.Println(stringList)

	//2、sort降序排序
	intList := []int{2, 4, 3, 5, 7, 6, 9, 8, 1, 0}
	floatList := []float64{4.2, 5.9, 12.4, 10.2, 50.7, 99.9, 31.4, 27.81828, 3.14}
	stringList := []string{"a", "c", "b", "z", "x", "w", "y", "d", "f", "i"}
	sort.Sort(sort.Reverse(sort.IntSlice(intList)))
	sort.Sort(sort.Reverse(sort.Float64Slice(floatList)))
	sort.Sort(sort.Reverse(sort.StringSlice(stringList)))
	fmt.Printf("%v\n%v\n%v\n", intList, floatList, stringList)
}
